草庐IT

Android ArrayList迭代

全部标签

c++ - 生成具有迭代器行为的仿函数

我有一个问题,很可能以前有人这样问过,因为我认为我想要的是相当多的人想要的东西。但是我想不出任何表达它的方式来返回我在搜索中想要的东西(不是谷歌,不是这里)。所以也许这里的答案只是一个用来描述我的意思的术语。我想要实现的是大致执行以下操作的内容:它可以采用仿函数结构/类并生成一系列值对于基于仿函数函数的所述仿函数。应该可以使用有状态的仿函数,即应该可以在状态a中实例化一个仿函数并让它运行直到它处于状态b,生成值的范围{f(a),f(a+1),...,f(b)},其中f(a+1)表示f所代表的系列中的下一项。它的行为类似于迭代器,即它可以代替迭代器传递,例如用值填充vector。我认为名

c++ - 迭代多个 std::vector

我在这里和其他地方读到,当使用索引迭代std::vector时,你应该:std::vectorx(20,1);for(std::vector::size_typei=0;i但是如果您要迭代两个不同类型的vector会怎样:std::vectorx(20,1);std::vectory(20,1.0);for(std::vector::size_typei=0;i假设安全吗std::vector::size_type与属于同一类型std::vector::size_type?仅使用std::size_t是否安全?? 最佳答案 是的,对

c++ - 我怎样才能制作自己的惰性迭代器?

我正在制作一个生成大量数据的C++11类。该数据当前来自数据库,不能完全放入内存中。我想为用户提供一个行为类似于常规STL迭代器的迭代器,但那样会很懒惰。更准确地说,我将能够做这样的事情:for(auto&item:big_bunch_of_data){do_stuff_with(item);}只有在每次迭代时才从数据库中检索项目。如果我是对的,这个新语法就是for(stuff::iteratorit=big_bunch_of_data.begin();it!=big_bunch_of_data.end();it++){do_stuff_with(*it);}这是否意味着通过提供beg

c++ - 下标迭代器中的 lambda

在下标运算符中使用lambda似乎不适用于g++和clang。这是实现错误还是c++标准中的“不愉快”规则?例子:classA{public:templatevoidoperator[](T){}templatevoidoperator()(T){}};intmain(){Aa;a[[](){}];//didnotcompiler:seeerrormessagea([](){});//worksasexpected}错误:main.cpp:13:6:error:twoconsecutive'['shallonlyintroduceanattributebefore'['tokena[[

c++ - 集合中的迭代器如何工作

我想知道在C++的STL中设置的迭代器是如何工作的。我猜该集合是使用二叉搜索树实现的,这意味着迭代器会按顺序遍历这棵树。但我的问题是,他们什么时候进行这种遍历,在一开始当我们喜欢它=s.begin()并将遍历的指针存储在内部堆栈中,并在迭代器中的每个增量上仅引用此数据结构或者迭代器中的增量对树进行新的中序遍历。我的意思是当我们初始化时sets;set::iteratorit;//andthenuseitlike:for(it=s.begin();it!=s.end();){dosth();++it;//doesthisdoainordertraversalofthetreeagaint

c++ - 如何在迭代器位置后插入元素

std::list.insert在迭代器位置之前插入一个元素。如何在迭代器位置后插入元素。 最佳答案 这就是list::insert所做的。在插入你的值之前增加你的迭代器:if(someIterator!=someList.end()){someIterator++;}someList.insert(someIterator,someValue); 关于c++-如何在迭代器位置后插入元素,我们在StackOverflow上找到一个类似的问题: https://

c++ - 现代编译器能否展开使用开始和结束迭代器表示的 `for` 循环

考虑以下代码vectorv;//fillvconstvector::iteratorend=v.end();for(vector::iteratori=v.bgin();i!=end;++i){//dostuff}g++、clang++、icc等编译器是否能够像这样展开循环。不幸的是,我不知道程序集是否能够从输出中验证循环是否展开。(而且我只能访问g++。)在我看来,这似乎需要代表编译器比平时更聪明,首先推断迭代器是随机访问迭代器,然后计算出循环执行的次数。启用优化后,编译器可以执行此操作吗?感谢您的回复,在你们中的一些人开始讲授过早优化之前,这是一个出于好奇的练习。

c++ - 将迭代器作为函数参数传递

我尝试编写一个函数,它将对容器的元素求和。这个容器可以是Vector、List、Queue等...这就是我尝试模板的原因。不幸的是我得到了这个错误:'C'isnotatemplate来源:#include#includeusingnamespacestd;templateTsum(C::iteratorbegin,C::iteratorend){Ts=null;for(C::iteratorit=begin;it!=end;it++){s+=*it;}returns;}intmain(){vectorv={5,9,0,11};cout我做错了什么?我该如何解决?

c++ - 获取指向迭代器引用的 STL 容器的指针?

例如,以下是可能的:std::sets;std::set::iteratorit=s.begin();我想知道相反的情况是否可能,比方说,std::set*pSet=it->**getContainer**();//somethinglikethis... 最佳答案 不,没有可移植的方法来做到这一点。迭代器甚至可能没有对容器的引用。例如,一个实现可以使用T*作为iterator两者都输入std::array和std::vector,因为两者都将其元素存储为数组。此外,迭代器比容器更通用,并不是所有的迭代器都指向容器(例如,有输入和输

c++ - std::deque:如何获得指向指定索引处元素的迭代器?

我有一个std::deque,我想在指定的索引处插入一个元素(我知道std::list在这方面会更好)。deque::insert()函数采用迭代器来指定要插入的位置。给定一个索引,如何获得指向该位置的迭代器,以便我可以将该迭代器传递给insert()?例如:voidinsertThing(deque&things,Thingthing,size_tindex){deque::iteratorit=/*whatdoIdohere?*/things.insert(it,thing);}我确定这是一个非常基本的问题,对此我深表歉意。自从我使用STL以来已经有很长时间了,我在std::deq